/**
 * @Author:  蓝建平
 * @Description:  工厂构造方法
 * @Date:  2019/12/5
 */
//初始化列表会在构造方法体执行之前执行
//使用逗号分隔初始化表达式
//初始化列表常用于设置final变量的值
class MyLogger{
  final String name;
  static final Map<String,MyLogger> _cache=<String,MyLogger>{};
  MyLogger._internal(this.name);//私有构造方法
//  初始化列表
  MyLogger.withMap(Map map):name=map["name"]{
//    this.name=map["name"];
  }
  factory MyLogger(String name)
  {
    if(_cache.containsKey(name))
      {
        return _cache[name];
      }
    else
      {
        final myLogger=MyLogger._internal(name);
        _cache[name]=myLogger;
        return myLogger;
      }
  }

  void log(String msg)
  {
    print(msg);
  }
}
//final属性的赋值必须在构造方法执行前完成，除了语法糖方式，初始化列表也是在构造方法之前执行的